package com.lainiao.session;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 *  Session 对象
 *      Session 对象的获取：
 *          request.getSession();
 *          先判断session对象是否存在，若存在，则获取，若不存在，则创建
 *      常用方法：
 *  JSESSIONID 标识符（session 的 id）
 *      1. sessionId 是标识客户端和服务端会话的唯一标识
 *      2. 当请求到达服务端，如果开启了会话（访问了session），服务器首先会查看，是否从客户端回传了一个名为JSESSIONID的cookie
 *          2.1 如果有，则根据JSESSIONID的值，去查看是否有一个id为JSESSIONID值的session对象
 *              2.1.1   如果有，则认为这是之前的一次会话，返回session对象，数据共享
 *              2.1.2   如果没有，则认为这是一次新的会话，重新创建一个session对象，并标志此次会话，给一个新的sessionId，并赋值给JSESSIONID
 *          2.2 如果没有，则认为这是一次新的会话...
 *      3. 名为 JSESSIONID 的 cookie
 *          当用户请求服务器时，如果访问了session，服务器会创建一个名为JSESSIONID，值为sessionId的cookie，并添加给response对象，响应给客户端
 *      4. Session底层由Cookie实现
 */
@WebServlet("/sm")
public class session01_SessionMethods extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 获取 Session 对象
        HttpSession session = request.getSession();

        // 获取 Session 的会话标识符
        System.out.println(
                session.getId()
        );

        // 获取 Session 的创建时间
        System.out.println(
                session.getCreationTime()
        );

        // 获取 Session 的最后一次访问时间
        System.out.println(
                session.getLastAccessedTime()
        );

        // 判断是否是新的 Session对象
        System.out.println(
                session.isNew()
        );
    }
}
